var fs = require("fs")
var path = require("path")

var root = path.join(__dirname);

const dirSrc = 'E:\\zhgy\\JOPEN\\src\\com\\jopen_shop';
// const dirSrc = 'E:\\zhgy\\JOPEN\\src\\com\\jopen_shop\\module\\house\\service';
// const dirSrc = 'E:\\zhgy\\JOPEN\\src\\com\\jopen_shop\\module\\weixin\\manage\\tenant\\action';


// removeBak(dirSrc);

readDir(dirSrc);
// readDir('E:\zhgy\JOPEN\src\com\jopen_shop');



function removeBak(dirIn) {
    fs.readdir(dirIn, function (err, files) {
        if (err) {
            console.log(dirIn + ' err: ' + err);
            return;
        }

        // console.log('----------' + dirIn);
        // console.dir(files);

        files.forEach(function (subName) {
            if (subName.startsWith('.')) {
                return;
            }

            var subPath = `${dirIn}${path.sep}${subName}`;

            var subStat = fs.lstatSync(subPath);

            if (subStat.isDirectory()) {
                removeBak(subPath);
                // console.log(subPath + '-- dir');
            } else if (subStat.isFile()) {
                if (subPath.endsWith('.bak')) {
                    console.warn("del " + subPath);
                    // fs.unlinkSync(subPath);
                }

            }
        });
    });
}


function readDir(dirIn) {
    fs.readdir(dirIn, function (err, files) {
        if (err) {
            console.log(dirIn + ' err: ' + err);
            return;
        }

        // console.log('----------' + dirIn);
        // console.dir(files);

        files.forEach(function (subName) {
            if (subName.startsWith('.')) {
                return;
            }

            var subPath = `${dirIn}${path.sep}${subName}`;

            var subStat = fs.lstatSync(subPath);

            // console.log('----------' + subPath);
            // console.dir(subStat);
            // console.dir(subStat.isFile);

            if (subStat.isDirectory()) {
                readDir(subPath);
                // console.log(subPath + '-- dir');
            } else if (subStat.isFile()) {
                dealFile(subPath);
            }

        });
    });
}


// efbbbf70
const bufErr = Buffer.from('efbbbf', 'hex');

var listErr = [];

function dealFile(filePath) {
    // console.log('------------');
    // console.log(filePath);

    // var fd = fs.openSync(filePath, 'r');

    var bufRead = Buffer.allocUnsafe(3);
    bufRead.fill(0);

    fs.open(filePath, 'r', function (err, fd) {
        if (err) {
            console.error(filePath + ' openerr: ' + err);
            return;
        }

        fs.read(fd, bufRead, 0, 3, 0, function (err, br, buf) {

            if (bufErr.equals(buf)) {
                // listErr.push(filePath);

                dealErrFile(filePath);
            } else {
                // if (filePath.endsWith('.bak')) {
                //     console.log(filePath + " --0 ");

                //     // fs.unlinkSync(filePath.slice(0, filePath.length - 4));
                //     fs.renameSync(filePath, filePath.slice(0, filePath.length - 4));
                // }

                console.log(filePath + " ---- " + buf.toString('hex'));
            }


        });
    });

    // fs.readFile(filePath, 'utf8', function(err, data) {
    //     console.log(filePath + " -- " + data);
    // });
}

function dealErrFile(filePath) {
    console.log('** ' + filePath);


    // if (filePath.endsWith('.bak')) {
    //     console.log("---" + filePath);
    //     fs.unlink(filePath, (err) => {
    //         if (err) {
    //             console.log("---" + filePath + ' del err:' + err);
    //             return;
    //         }

    //         console.log("--- del" + filePath);
    //     })
    // }

    fs.readFile(filePath, function (err, buf) {
        if (err) {
            console.log("---" + filePath + 'err:' + err);
            return;
        }

        console.log(filePath + " -- " + buf.slice(0, 3).toString('hex'));
        console.log(" ----- ");
        // console.log(buf.slice(3).toString('utf-8'));

        fs.writeFile(filePath, buf.slice(3), (err) => {
            if (err) throw err;
            console.log('The file has been saved!');


            // fs.unlinkSync(filePath);
            // fs.renameSync(filePath + '.bak', filePath);

            // fs.unlink(filePath, function (err) {
            //     if (err) {
            //         console.log("---***　" + filePath + 'del err:' + err);
            //         return;
            //     }



            // })

        });

    });

}
